package leetcode;

import java.util.Arrays;

public class MinNumber {
    public static void main(String[] args) {
        MinNumber minNumber = new MinNumber();
        System.out.println(minNumber.minNumber(new int[]{20, 1}));
    }

    /**
     * 把数组排成最小的数
     * 思路：由于是从数组中取排列，所以，最终结果的位数肯定是小于等于nums中所有元素拼接起来的长度的
     * 1.如果数组中包含0，那么我们直接不排它，这样可以使得结果少一位
     * 2.初始化结果为ans = nums[0] + ""
     * 3.从nums[1]开始，到nums[n-1]，和ans进行比较（比较规则为：按位比较，如果num[i]中的只要有一个位数大于ans中对应的位数，那么就添加到ans后面，反之，只要有一个小于ans中对应的位数，那么就添加到ans前面）
     *
     * @param nums
     * @return
     */
    public String minNumber(int[] nums) {
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = nums[i] + "";
        }
        Arrays.sort(strs, (str1, str2) -> (str1 + str2).compareTo(str2 + str1));
        StringBuilder sb = new StringBuilder();
        for (String str : strs) {
            sb.append(str);
        }
        return sb.toString();
    }
}
